/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.upc.poo.batalla;

/**
 *
 * @author alumno EL tablero sera de 8 * 5
 */
public class Tablero {

    public int[][] matriz = {
        {0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0}};
    public int[][] matriz_jugadas;

    public Tablero() {
    }

    public int[][] getMatriz() {
        return matriz;
    }

    public void setMatriz(int[][] matriz) {
        this.matriz = matriz;
    }

    public int[][] getMatriz_jugadas() {
        return matriz_jugadas;
    }

    public void setMatriz_jugadas(int[][] matriz_jugadas) {
        this.matriz_jugadas = matriz_jugadas;
    }

    public boolean isDisponibleBarco(int barco, int fila, int columna, int posicion) {
        if (posicion == Juego.HORIZONTAL) {
            return isDisponibleBarcoFila(barco, fila, columna);
        } else if (posicion == Juego.VERTICAL) {
            return isDisponibleBarcoColumna(barco, fila, columna);
        } else {
            return false;
        }
    }

    public boolean isDisponibleBarcoFila(int barco, int fila, int columna) {
        int casillas = 0;
        for (int j = columna; j < matriz[fila].length; j++) {
            if (matriz[fila][j] == 0) {
                casillas += 1;
            }
        }
        return casillas >= barco;
    }

    public boolean isDisponibleBarcoColumna(int barco, int fila, int columna) {
        int casillas = 0;
        for (int j = fila; j < matriz.length; j++) {
            if (matriz[j][columna] == 0) {
                casillas += 1;
            }
        }
        return casillas >= barco;
    }

    public void colocarBarco(int barco, int fila, int columna, int posicion) {
        if (posicion == Juego.HORIZONTAL) {
            colocarBarcoHorizontal(barco, fila, columna);
        } else if (posicion == Juego.VERTICAL) {
            colocarBarcoVertical(barco, fila, columna);
        }
    }

    public void colocarBarcoHorizontal(int barco, int fila, int columna) {
        int tamano = columna + barco;
        for (int i = columna; i < tamano; i++) {
            matriz[fila][i] = barco;
        }
    }

    public void colocarBarcoVertical(int barco, int fila, int columna) {
        int tamano = fila + barco;
        for (int i = fila; i < tamano; i++) {
            matriz[i][columna] = barco;
        }
    }

    public void realizarMovimiento(int fila, int columna, int marca) {
        //matriz[fila][columna] = marca;
        matriz_jugadas[fila][columna] = marca;
    }

    public void clonarTablero() {
        matriz_jugadas = new int[matriz.length][];
        for (int i = 0; i < matriz.length; i++) {
            int[] aMatrix = matriz[i];
            int aLength = aMatrix.length;
            matriz_jugadas[i] = new int[aLength];
            System.arraycopy(aMatrix, 0, matriz_jugadas[i], 0, aLength);
        }
    }

    public boolean isTableroDestruido(int marca) {
        boolean resultado = true;
        /*HORIZONTAL*/
        for (int fila = 0; fila < matriz.length; fila++) {
            for (int colu = 0; colu < matriz[fila].length; colu++) {
                if (matriz[fila][colu] > 0) {
                    resultado &= matriz_jugadas[fila][colu] == marca;
                }
            }
        }
        return resultado;
    }
}
